package traitementRequetes;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class DonneesRetournees {

	private List<List<String>> resultats;
	private Map<String, List<List<String>>> resultatsEnClusters;
	private List<String> colonnes;

	public List<List<String>> getResultats() {
		return resultats;
	}

	public void setResultats(List<List<String>> resultats) {
		this.resultats = resultats;
	}

	public List<String> getColonnes() {
		return colonnes;
	}

	public void setColonnes(List<String> colonnes) {
		this.colonnes = colonnes;
	}

	public Map<String, List<List<String>>> getResultatsEnClusters() {
		return resultatsEnClusters;
	}

	public void setResultatsEnClusters(
			Map<String, List<List<String>>> resultatsEnClusters) {
		this.resultatsEnClusters = resultatsEnClusters;
	}

	public void rangerEnClusters(String axe1, String axe2) {

		Map<String, List<List<String>>> clusters = new HashMap<String, List<List<String>>>();
		List<String> listeCol = this.getColonnes();
		List<List<String>> liste = this.getResultats();
		int positionAxe1 = listeCol.indexOf(axe1);
		int positionAxe2 = listeCol.indexOf(axe2);

		for (List<String> ligne : liste) {

			String valeurAxe1 = ligne.get(positionAxe1);
			String valeurAxe2 = ligne.get(positionAxe2);
			String nomCluster = valeurAxe1 + "*" + valeurAxe2;

			if (clusters.containsKey(nomCluster)) {
				List<List<String>> clusterAncien = clusters.get(nomCluster);
				clusterAncien.add(ligne);
				clusters.put(nomCluster, clusterAncien);
				System.out.println(" Maj de : " + nomCluster);
			} else {
				List<List<String>> clusterNouveau = new ArrayList<List<String>>();
				clusterNouveau.add(ligne);
				clusters.put(nomCluster, clusterNouveau);
			}

		}

		this.setResultatsEnClusters(clusters);

	}

	public void rangerResultats(String axe1, String axe2) {
		List<List<String>> listeRangee = new ArrayList<List<String>>();
		this.rangerEnClusters(axe1, axe2);
		Map<String, List<List<String>>> resultatsEnClustersARanger = this
				.getResultatsEnClusters();

		Set<String> keys = resultatsEnClustersARanger.keySet();
		List<String> clesCopiees = new ArrayList<String>();
		for (String key : keys) {
			clesCopiees.add(key);
		}
		List<String> sortedKeys = new ArrayList<String>();

		while (clesCopiees.size() > 0) {
			String min = clesCopiees.get(0);
			for (String cle : clesCopiees) {
				if (min.compareTo(cle) > 0) {
					min = cle;
				}
			}
			clesCopiees.remove(min);
			sortedKeys.add(min);
		}

		for (String key : sortedKeys) {
			List<List<String>> lignesCluster = resultatsEnClustersARanger
					.get(key);
			for (List<String> ligne : lignesCluster) {
				listeRangee.add(ligne);
			}
		}

		this.setResultats(listeRangee);

	}

}
